#!/bin/bash
# 时间：gorm练手项目初始化 最开始先用的是sqlite3，但是由于驱动需要cgo功能，故降低难度，直接使用了mysql（docker方式启动）.
# 描述：2023-03-16 14:45

mkdir 16gorm
cd 16gorm/
mkdir gormdemo
cd gormdemo/
go mod init gormdemo
go get -u github.com/jinzhu/gorm
go get -u github.com/jinzhu/gorm/dialects/sqlite

# 参考：https://www.topgoer.cn/docs/gorm/gorm-1c54sbcda16o6
# 注意，上面的库不是官方的gorm库，使用上还是有区别的

cat > main.go <<'EOL'
package main

import (
  "github.com/jinzhu/gorm"
  _ "github.com/jinzhu/gorm/dialects/sqlite"
)

type Product struct {
  gorm.Model
  Code string
  Price uint
}

func main() {
  db, err := gorm.Open("sqlite3", "test.db")
  if err != nil {
    panic("failed to connect database")
  }
  defer db.Close()

  //自动检查 Product 结构是否变化，变化则进行迁移
  db.AutoMigrate(&Product{})

  // 增
  db.Create(&Product{Code: "L1212", Price: 1000})

  // 查
  var product Product
  db.First(&product, 1) // 找到id为1的产品
  db.First(&product, "code = ?", "L1212") // 找出 code 为 l1212 的产品

  // 改 - 更新产品的价格为 2000
  db.Model(&product).Update("Price", 2000)

  // 删 - 删除产品
  db.Delete(&product)
}
EOL


#  sqlite3需要cgo，开启，但是并没有安装gcc，故还是一样。
go env CGO_ENABLED=1
go run main.go 


go env -w CGO_ENABLED=1
go env


go mod tidy


